'''
生产者与消费者:两个线程之间的通信

Python的queue模块中提供了同步的、线程安全的队列类，
包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列ifoQueue，和优先级队列PriorityQueue。
这些队列都实现了锁原语(可以理解为原子操作，即要么不做，要么就做完)，能够在多线程中直接使用。可以使用队列来实现线程间的同步。
'''
import threading
import queue
import random
import time

def producer(q):
    i = 0
    while i < 10:
        num = random.randint(1, 100)
        q.put("生产者产生数据：%d" % num)
        print("生产者产生数据：%d" % num)
        time.sleep(1)
        i += 1
    q.put(None)
    #完成任务
    q.tack_done()

def consume(q):
    while True:
        item = q.get()
        if item is None:
            break
        print("消费者消费数据：%s" % item)
        time.sleep(4)
    #完成任务
    q.task_done()

if __name__ == '__main__':
    q = queue.Queue(10)
    arr = []
    # 创建生产者
    th = threading.Thread(target=producer, args=(q,))
    th.start()
    # 创建消费者
    tc = threading.Thread(target=consume, args=(q,))
    tc.start()

    th.join()
    tc.join()
    print("任务结束")









